package org.ytor.core.sqlflow.builder.select;

import org.ytor.core.sqlflow.SFunction;

/**
 * created by yangtong on 2025/8/11 10:06:45
 * <br/>
 * HAVING 阶段：
 * 允许：ORDER BY / LIMIT / OFFSET / 终止
 */
public interface HavingStage extends Terminable, ISelect {

    /**
     * 进入 ORDER BY 阶段
     */
    <T> OrderStage orderByAsc(SFunction<T, ?> f);

    /**
     * 进入 ORDER BY 阶段
     */
    <T> OrderStage orderByDesc(SFunction<T, ?> f);

    /**
     * 进入 ORDER BY 阶段（原生片段）
     */
    OrderStage orderByAscRaw(String... raw);

    /**
     * 进入 ORDER BY 阶段（原生片段）
     */
    OrderStage orderByDescRaw(String... raw);

    /**
     * 直接进入 LIMIT 阶段（兼容原生 SQL：HAVING 后可直接 LIMIT）
     */
    LimitStage limit(Integer limit);

    /**
     * 直接进入 OFFSET 阶段
     */
    OffsetStage offset(Integer offset);
}
